#include <iostream>
#include <string>
#include <regex>
int main()
{
    std::string str="GET /lkm/login?user=lin&pass=123456 HTTP/1.1\r\n";
    std::smatch matches;

    std::regex e("(GET|HEAD|POST|DELETE) ([^?]*)(?:\\?(.*))? (HTTP/1\\.[01])(?:\n|\r\n)?");
    //（）代表提取
    //(GET|HEAD|POST|DELETE) 代表匹配并提取其中的任意一个字符串
    //[^?] 代表匹配非问号字符，后边的*代表0次或多次
    // \\?代表原始的?字符 (.*)表示提取?之后的任意字符0次或多次
    //HTTP1\\.[01] 表示匹配以HTTP/1.开始，后边有0或1的字符串
    //(?:...)代表匹配某个格式字符串，但是不提取，最后的？代表匹配前面的表达式0次或1次
    std::regex_match(str,matches,e);

    for(auto &s:matches)
    {
        std::cout<<s<<std::endl;
    }

    return 0;
}